import axios from 'axios'

// 创建请求对象
const request = axios.create({
  baseURL: '', // 设置基础 URL，所有请求都会基于此 URL
  timeout: 5000 // 设置请求超时时间，单位是毫秒
})

// request 对象的请求拦截器
// 在请求发起前进行处理，例如处理 token
request.interceptors.request.use(
  config => {
    // 配置请求头，设置 Content-Type 为 JSON 格式
    config.headers['Content-Type'] = 'application/json;charset=utf-8';
    // 添加 token 等身份认证信息（若有需求）
    // config.headers['Authorization'] = 'Bearer your_token';

    return config; // 返回修改后的配置
  },
  error => {
    return Promise.reject(error) // 请求出错时返回错误
  }
)

// request 对象的响应拦截器
// 在接口响应后统一处理结果
request.interceptors.response.use(
  response => {
    let res = response.data; // 获取响应数据

    // 如果返回的是文件（responseType 为 blob），直接返回文件数据
    if (response.config.responseType == 'blob') {
      return res;
    }

    // 如果返回的是字符串类型数据，尝试解析成 JSON
    if (typeof res === 'string') {
      res = res ? JSON.parse(res) : res; // 解析字符串为 JSON 对象
    }

    return res; // 返回处理后的响应数据
  },
  error => {
    return Promise.reject(error) // 响应出错时返回错误
  }
)

export default request // 导出自定义的 axios 实例
